package com.tgy.基础学习.方法引用;
import java.util.Comparator;
import java.util.function.BiPredicate;
import java.util.function.Consumer;


/*
三种使用情况：
1，对象::实例方法名（非静态方法）
2，类::静态方法名
3，类::实例方法名

 */
public class 方法引用 {

    public static void main(String[] args) {
/*
        Consumer: 方法: void accept (T t)
        方法体中的方法: void Printlin(String x)
        方法引用使用条件：
            前面的函数式接口的参数和返回值
            和
            具体的方法的实现中的 参数和返回值一致
*/
        Consumer<String> con = a -> System.out.println("这是简单的lambda"+a);
        con.accept("大家好");


        Consumer<String> aaa = System.out::println;
        aaa.accept("这是方法引用");


        /**
         * 类 静态方法名
         */
        Comparator<Integer> com = (a,b)->Integer.compare(a,b);
        System.out.println(com.compare(2,6));

        Comparator<Integer> com2 = Integer::compare;
        System.out.println(com.compare(2,6));

        /**
         * 类 静态方法名
         * 使用这个方法引用的前提是：X作为方法的调用者，Y为方法的实际参数
         */
        BiPredicate<String,String> bp = (x,y)->x.equals(y);
        System.out.println(bp.test("abc", "asd"));

        BiPredicate<String,String> bp2 = String::equals;
        System.out.println(bp.test("abc", "asd"));

    }

}
